BaseProtocolServer

StockSharp.Server.Core

Базовый класс для серверов протоколов (FIX, SBE и т. д.). Содержит общую инфраструктуру: жизненный цикл, сеансы, подписки, каналы сообщений, фоновые задачи.

Наследует: BaseLogReceiver

Реализует: IProtocolServer, ILogReceiver, ILogSource, IDisposable

Конструкторы

BaseProtocolServer
protected BaseProtocolServer(TSettings settings)
baseProtocolServer = BaseProtocolServer(settings)

Инициализирует новый экземпляр.

settings
Настройки сервера.

Свойства

LoginRateLimiter
protected LoginRateLimiter LoginRateLimiter { get; private set; }
value = baseProtocolServer.LoginRateLimiter
baseProtocolServer.LoginRateLimiter = value

Ограничитель скорости для попыток входа (общий для всех слушателей).

Sessions
public IEnumerable<IMessageListenerSession> Sessions { get; }
value = baseProtocolServer.Sessions

Активные сеансы.

Settings
public TSettings Settings { get; }
value = baseProtocolServer.Settings

Настройки.

State
public ChannelStates State { get; protected set; }
value = baseProtocolServer.State
baseProtocolServer.State = value

Получает базовое хранилище.

Методы

AddSubscription
public void AddSubscription(ServerSubscription subscription)
baseProtocolServer.AddSubscription(subscription)

Добавить подписку.

subscription
Подписка.
ClearState
protected virtual void ClearState()
baseProtocolServer.ClearState()

Очистить все состояние: прослушиватели, сеансы, подписки.

Convert
protected string Convert(string value)
result = baseProtocolServer.Convert(value)

Преобразование текста в латиницу, если это настроено.

CreateSubscription
protected abstract TSubscription CreateSubscription(TClientSession session, string requestId, ServerSubscription subscription, MessageTypes type)
result = baseProtocolServer.CreateSubscription(session, requestId, subscription, type)

Создайте экземпляр информации о подписке.

Disconnect
public void Disconnect(IMessageListenerSession session)
baseProtocolServer.Disconnect(session)

Отключить сеанс.

session
Сессия.
DisposeManaged
protected override void DisposeManaged()
baseProtocolServer.DisposeManaged()

Освободите ресурсы.

EnqueueMessage
protected void EnqueueMessage(TClientSession session, string requestId, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(session, requestId, handler, cancellationToken)

Поставить сообщение в очередь для сеанса с идентификатором запроса.

EnqueueMessage
protected void EnqueueMessage(TSubscription subscription, TClientSession session, string requestId, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, session, requestId, handler, cancellationToken)

Основная очередь: планирование работы в сеансе клиента.

EnqueueMessage
protected void EnqueueMessage(TSubscription[] subscribers, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscribers, handler, cancellationToken)

Поставить сообщение в очередь для нескольких подписчиков.

EnqueueMessage
protected void EnqueueMessage(TSubscription[] subscribers, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscribers, handler, cancellationToken)

Поставить сообщение в очередь для нескольких подписчиков (с логическим результатом).

EnqueueMessage
protected void EnqueueMessage(TSubscription subscription, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, handler, cancellationToken)

Поставьте сообщение в очередь для одной подписки.

EnqueueMessage
protected void EnqueueMessage(TSubscription subscription, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, handler, cancellationToken)

Поставить сообщение в очередь для одной подписки (с логическим результатом).

EnqueueMessage
protected void EnqueueMessage(TClientSession session, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(session, handler, cancellationToken)

Поставить сообщение в очередь для сеанса (без идентификатора запроса).

GetSessionKey
protected abstract string GetSessionKey(TClientSession session)
result = baseProtocolServer.GetSessionKey(session)

Получите ключ, используемый для группировки клиентских сеансов (e.g. SenderCompId).

GetSubscriptions
public IEnumerable<ServerSubscription> GetSubscriptions(IMessageListenerSession session)
result = baseProtocolServer.GetSubscriptions(session)

Получить подписку на указанную сессию.

session
Сессия.

Возвращает: Подписки.

HasSubscriptions
public bool HasSubscriptions(DataType dataType, SecurityId securityId)
result = baseProtocolServer.HasSubscriptions(dataType, securityId)

Есть подписчики.

IsStubSubscription
protected abstract bool IsStubSubscription(TSubscription subscription)
result = baseProtocolServer.IsStubSubscription(subscription)

Проверьте, является ли подписка заглушкой (заполнителем).

Load
public override void Load(SettingsStorage storage)
baseProtocolServer.Load(storage)

Загрузить настройки.

storage
Хранилище настроек.
OnClearListenerState
protected abstract void OnClearListenerState()
baseProtocolServer.OnClearListenerState()

Очистить состояние прослушивателя для конкретного протокола (остановить прослушиватели и т. д.).

OnStartListeners
protected abstract void OnStartListeners(CancellationToken cancellationToken)
baseProtocolServer.OnStartListeners(cancellationToken)

Запустите прослушиватели для конкретного протокола (TCP и т. д.). Добавляйте задачи в _backgroundTasks.

ProcessInMessage
protected abstract void ProcessInMessage(Message message, CancellationToken cancellationToken)
baseProtocolServer.ProcessInMessage(message, cancellationToken)

Обработать входящее сообщение и направить его подписанным клиентам.

ProcessLogout
protected virtual void ProcessLogout(TClientSession session)
baseProtocolServer.ProcessLogout(session)

Обработать выход/отключение клиента.

RaiseNewOutMessage
protected void RaiseNewOutMessage(IMessageListenerSession session, Message message)
baseProtocolServer.RaiseNewOutMessage(session, message)

Напишите исходящее сообщение на канал.

RaiseSessionConnected
protected void RaiseSessionConnected(IMessageListenerSession session)
baseProtocolServer.RaiseSessionConnected(session)

Вызов события подключения сеанса.

RaiseSessionDisconnected
protected void RaiseSessionDisconnected(IMessageListenerSession session)
baseProtocolServer.RaiseSessionDisconnected(session)

Вызов события отключения сеанса.

RemoveSubscription
public bool RemoveSubscription(ServerSubscription subscription)
result = baseProtocolServer.RemoveSubscription(subscription)

Удалить подписку.

subscription
Подписка.

Возвращает: если подписка найдена, иначе .

Resume
public bool Resume(ServerSubscription subscription)
result = baseProtocolServer.Resume(subscription)

Возобновите подписку.

subscription
Подписка.

Возвращает: если подписка найдена, иначе .

Resume
public void Resume(IMessageListenerSession session)
baseProtocolServer.Resume(session)

Возобновить сеанс.

session
Сессия.
RunAsync
public IAsyncEnumerable<ValueTuple<IMessageListenerSession, Message>> RunAsync(CancellationToken cancellationToken)
result = baseProtocolServer.RunAsync(cancellationToken)

Запустите асинхронную обработку сообщений и возвращайте исходящие сообщения как IAsyncEnumerable. Открывает сервер в начале и закрывается в конце.

Save
public override void Save(SettingsStorage storage)
baseProtocolServer.Save(storage)

Сохраните настройки.

storage
Хранилище настроек.
ScheduleSessionWork
protected abstract void ScheduleSessionWork(TClientSession session, ServerSubscription subscription, string requestId, Func<TClientSession, string, CancellationToken, ValueTask<bool>> handler)
baseProtocolServer.ScheduleSessionWork(session, subscription, requestId, handler)

Запланируйте работу в исходящей очереди клиентского сеанса.

SendInMessage
public virtual bool SendInMessage(Message message)
result = baseProtocolServer.SendInMessage(message)

Отправьте входящее сообщение на сервер для обработки и маршрутизации клиентам.

StartServer
protected void StartServer(CancellationToken cancellationToken)
baseProtocolServer.StartServer(cancellationToken)

Запустите сервер: инициализируйте состояние, запустите прослушиватели и фоновые задачи.

StopServer
protected void StopServer()
baseProtocolServer.StopServer()

Остановите сервер: отмените задачи, завершите каналы, очистите состояние.

Suspend
public void Suspend(IMessageListenerSession session)
baseProtocolServer.Suspend(session)

Приостановить сеанс.

session
Сессия.
Suspend
public bool Suspend(ServerSubscription subscription)
result = baseProtocolServer.Suspend(subscription)

Приостановить подписку.

subscription
Подписка.

Возвращает: если подписка найдена, иначе .

События

SessionConnected
public event Action<IMessageListenerSession> SessionConnected
baseProtocolServer.SessionConnected += handler

Событие, связанное с сеансом.

SessionDisconnected
public event Action<IMessageListenerSession> SessionDisconnected
baseProtocolServer.SessionDisconnected += handler

Событие отключения сеанса.

StateChanged
public event Action StateChanged
baseProtocolServer.StateChanged += handler

Событие изменения состояния.

SubscriptionChanged
public event Action<ServerSubscription> SubscriptionChanged
baseProtocolServer.SubscriptionChanged += handler

Событие изменения клиентской подписки.

Поля

_backgroundTasks
protected readonly List<Task> _backgroundTasks
value = baseProtocolServer._backgroundTasks

Фоновые задачи (прием клиентов, обработка сообщений и т.д.).

_cancellationRequests
protected readonly SynchronizedSet<long> _cancellationRequests
value = baseProtocolServer._cancellationRequests

Идентификаторы транзакций запроса на отмену отложенного ордера.

_changedSubscriptions
protected readonly SynchronizedSet<ServerSubscription> _changedSubscriptions
value = baseProtocolServer._changedSubscriptions

Измененные подписки ожидают уведомления.

_clientSessions
protected readonly CachedSynchronizedDictionary<string, CachedSynchronizedList<TClientSession>> _clientSessions
value = baseProtocolServer._clientSessions

Клиентские сеансы сгруппированы по сеансовому ключу (e.g. SenderCompId).

_incomingMessages
protected readonly Channel<Message> _incomingMessages
value = baseProtocolServer._incomingMessages

Канал входящих сообщений.

_outgoingMessages
protected readonly Channel<ValueTuple<IMessageListenerSession, Message>> _outgoingMessages
value = baseProtocolServer._outgoingMessages

Канал исходящих сообщений (пары сессия + сообщение).

_subscriptions
protected readonly SubscriptionHolder<TSubscription, TClientSession> _subscriptions
value = baseProtocolServer._subscriptions

Держатель подписки.